Perl正则表达式:替换一系列空格和换行符

您所在的位置:网站首页 perl 删除文件 Perl正则表达式:替换一系列空格和换行符

Perl正则表达式:替换一系列空格和换行符

2024-07-13 17:29| 来源: 网络整理| 查看: 265

文件bar的空格仅包含空格和换行符:

1234$ cat bar 1, 2,   3, 4

我想用S替换连续运行的空格(空格和换行符),即所需的输出是:

11,S2,S3,S4S

但是,我的所有尝试导致 被一个S替换,紧随其后的空格被另一个S替换:

123456789101112131415$ cat bar | perl -pe 's/\s+/S/g' 1,S2,SS3,S4S $ cat bar | perl -pe 's/\s+/S/gm' 1,S2,SS3,S4S $ cat bar | perl -pe 's/\s+/S/gms' 1,S2,SS3,S4S $ cat bar | perl -pe 's/[ ]+/S/gms' 1,S2,SS3,S4S $ cat bar | perl -pe 's/[ ]+/S/gm' 1,S2,SS3,S4S $ cat bar | perl -pe 's/[ ]+/S/g' 1,S2,SS3,S4S

这些是我能想到的相关正则表达式标志的所有组合:/g(全局替换),/s(让.匹配换行符)和/m(多行); 我总是在3之前有SS,在这里我只想S。

任何帮助将非常感激!

perl -p逐行读取输入。 您需要立即读取整个输入,或者记住上一行是否以空格结尾。

1perl -0777 -pe 's/\s+/S/g'

-0777一次读取整个文件。

1perl -pe 's/^\s+// unless 1 == $.; s/\s+/S/g;'

此处,所有前导空格都将被删除(第一行除外)。 无论如何,我们知道必须在换行符之前。

相关讨论 作为后续,-0是否与-0777一样好? 以我的示例为例。 我在这里和这里都看到了有关它的讨论,可能会对unicode处理产生影响,但无法说出为什么一个或另一个可能更有意义。 只要输入不包含任何空字节,@ RyanWilliams -0都可以工作,因此在这种情况下可以使用。 -0777更好,因为无论输入内容是什么字符,它都会始终处理整个文件。 同样,-0777的含义是约定俗成的" slurp",因此经验丰富的Perl程序员可以一目了然地了解您的操作,而不必怀疑您是否故意拆分空字节。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3